/**
 * 
 */
package br.com.mkmts.dao.jpa.cadastro;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.mkmts.dao.cadastro.VendaDao;
import br.com.mkmts.dao.jpa.JpaGenericDao;
import br.com.mkmts.dto.ProdutoDTO;
import br.com.mkmts.dto.VendaDTO;
import br.com.mkmts.model.vendas.VendaEntity;
import br.com.mkmts.utils.Adapter;
import br.com.mkmts.utils.MkmtsUtil;
import br.com.mkmts.view.controller.menu.vendas.constants.VendaUtils;

/**
 * @author christopher.rozario
 */
@Repository
public class VendaDaoImpl extends JpaGenericDao<VendaEntity, Integer> implements VendaDao{
	private StringBuilder builder;

	@Override
	@Transactional
	public List<VendaDTO> salesFilter(Integer codVendaFiltro,
			String nomeClienteFiltro, Date dataInicioFiltro,
			Date dataFinalFiltro) {
		boolean flag = false;
		builder = new StringBuilder();
		builder.append(SELECT);
		builder.append(_ESPACE);
		
		if(codVendaFiltro > 0){
			builder.append("WHERE v.codVenda = "+codVendaFiltro);
			flag = true;
		}
		if(!nomeClienteFiltro.equals("")){
			if(flag){
				builder.append("AND v.cliente.dadosPessoa.nome LIKE '"+nomeClienteFiltro+"%'");
				builder.append(_ESPACE);
			}else{
				builder.append("WHERE v.cliente.dadosPessoa.nome LIKE '"+nomeClienteFiltro+"%'");
				builder.append(_ESPACE);
				flag = true;
			}
		}
		if(null != dataInicioFiltro){
			if(flag){
				builder.append("AND v.dataVenda BETWEEN '"+MkmtsUtil.converterDataString(dataInicioFiltro, "dd/MM/yyyy")+" 00:00:00' AND '"+MkmtsUtil.converterDataString(dataFinalFiltro, "yyyy-MM-dd")+" 23:59:59'");
				builder.append(_ESPACE);
					
			}else{
				builder.append("WHERE v.dataVenda BETWEEN '"+MkmtsUtil.converterDataString(dataInicioFiltro, "yyyy-MM-dd")+" 00:00:00' AND '"+MkmtsUtil.converterDataString(dataFinalFiltro, "yyyy-MM-dd")+" 23:59:59'");
				builder.append(_ESPACE);
				
			}
		}
		builder.append(ORDER_BY);
		
		List<VendaEntity>listaRetornadaEntities = getEntityManager().createQuery(builder.toString(), VendaEntity.class).getResultList();
		List<VendaDTO>retorno = new ArrayList<VendaDTO>();
		for (int i = 0; i < listaRetornadaEntities.size(); i++) {
			VendaDTO dto = new VendaDTO();
			dto.setCliente(Adapter.entityToDto(listaRetornadaEntities.get(i).getCliente()));
			dto.setCodVenda(listaRetornadaEntities.get(i).getCodVenda());
			dto.setDataVenda(listaRetornadaEntities.get(i).getDataVenda());
			dto.setFormaDePagamento(listaRetornadaEntities.get(i).getFormaDePagamento());
			dto.setNumeroParcelas(listaRetornadaEntities.get(i).getNumeroParcelas());
			dto.setPossuiParcelas(listaRetornadaEntities.get(i).isPossuiParcelas());
			dto.setQtdeTotalPontosVendidos(listaRetornadaEntities.get(i).getQtdeTotalPontosVendidos());
			dto.setValorParcelas(listaRetornadaEntities.get(i).getValorParcelas());
			dto.setValorVenda(listaRetornadaEntities.get(i).getValorVenda());
			dto.setListaDeProdutos(new ArrayList<ProdutoDTO>());
			for (int j = 0; j < listaRetornadaEntities.get(i).getListaDeProdutos().size(); j++) {
				dto.getListaDeProdutos().add(Adapter.entityToDtoProdHistorico(listaRetornadaEntities.get(i).getListaDeProdutos().get(j)));
			}
			retorno.add(dto);
		}
		return retorno;
		
	}
	
}
